"""
任一大于2的偶数，都可表示成两个质数之和。
"""

# two points
def goldbach(n):
    # 素数 T/F 数组  list=[] 创建的是列表 数组要下面这样创建
    is_prime = [True] * (n+1)  # 这样开辟的才是连续的内存空间
    i = 2
    while(i*i<n):
        j = i
        while(i*j<n):
            is_prime[i*j] = False
            j=j+1
        i=i+1

    cnt = 0
    for i in range(2,n+1):
        if is_prime[i]:
            cnt = cnt + 1

    # 素数数组 
    prime = [None] * cnt
    idx=0
    for i in range(2,n+1):
        if is_prime[i]:
            prime[idx] = i
            idx=idx+1
    
    # 左右指针
    left = 0
    right = cnt - 1
    while(left < right):
        if(n == (prime[left]+prime[right])):
            print('Bingo!  ',n,'=',prime[left],'+',prime[right])
            break
        elif(n > (prime[left]+prime[right])):
            left =left+1
        else:
            right = right -1

goldbach(18)
